数组的两种构造方法:自变量，构造函数，数组是一种特殊的对象，和对象本质上没有区别
<script type="text/javascript">
	var arr = [,];//把数组拆分成了两位，都没有值
	var arr = [1,2,,,4];
	console.log(arr);

	var arr = new Array(10);//创建长度为10的空数组
	console.log(arr);
</script>

<script type="text/javascript">
	var arr1 = new Array(10.2);//不能写小数
</script>

<script type="text/javascript">
	var arr = [10.2];
	console.log(arr);
</script>
	
<script type="text/javascript">
	console.log(Array());//空执行Array
</script>

<script type="text/javascript">
	var arr = [];
	console.log(arr[10]);//undefined,访问数组的第十位,没有第十位不报错;想让数组报错，除非引用没有的方法，否则几乎报不了错
	var obj = {};//对象名也可以起名为 {10 :}
	console.log(obj[10]);
	arr[10] = 10;//给第十位赋值 
</script>

数组的方法 ES3.0 5.0 6.0

改变原数组
push,pop,shift,unshift,sort,reverse,splice
<script type="text/javascript">
	var arr = [1,2,3];
	//push方法
	Array.prototype.push = function(){
		for(var i = 0; i < arguments.length; i ++){
			this[this.length] = arguments[i];
		}
		return this.length;
	}
	arr.push(12,23);
	console.log(arr);
</script>

<script type="text/javascript">
	var arr = [1,2,3];
	arr.pop(1);//传参没用，最后一位剪切
	console.log(arr);
</script>

shift往前删除,unshift(往前插入)
<script type="text/javascript">
	var arr = [1,2,4,3,'a'];
	arr.unshift(1);
	console.log(arr);

	var arr = [1,2,4,3,'a'];
	arr.shift(3,4);
	console.log(arr);
</script>

<script type="text/javascript">
	var arr = [1,2,3,4,5];
	arr.splice(1,2);//从第几位开始，截取几位，在切口处添加新的数据
	console.log(arr);

	var arr = [1,2,3,5];
	arr.splice(3,0,4);//添加4到35中
	console.log(arr);
</script>

<script type="text/javascript">
	splice = function (pos){
		pos + = pos > 0 ?  0 : this.length
	}
</script>

//倒叙排列
<script type="text/javascript">
	var arr = [1,2,5,3];
	arr.reverse();
	console.log(arr);
</script>

<script type="text/javascript">
	var arr = [1,-1,-3,3,2]
	arr.sort();//排序按ASC码
	console.log(arr);
	arr.sort(function(a, b){//1.必须写形参2.看返回值 1）当返回值为负数时，前面的数放在前面  2）为正数，那么后面的数在前  3）为0，不动
		if(a > b){
			return 1; //return a - b;
		}else{
			return -1;//return a - b;
		}
		//return a - b;升序
		//return b -a;降序
	});
</script>

<script type="text/javascript">
	//给一个有序的数组，乱序
	var arr = [1,2,3,4,5,6,7];
	arr.sort(function(){
		return Math.random() - 0.5;
	})
</script>

<script type="text/javascript">
	//按年龄的大小排序
	var a = {
		name : 'as',
		age : 21
	},
		b = {
			name : 'sa',
			age : 14
		},
		c = {
			name : 'df',
			age : 23
		}

	var arr = [a,b,c];
	arr.sort(function(c,d){
		return c.age - d.age;
	});

	console.log(arr);
</script>

<script type="text/javascript">
	//按字符串长度排序
	var arr = ['asd','s','as','sdfg','dd','asdasdf'];
	arr.sort(function(a,b) {
		return a.length - b.length;
	});
	console.log(arr);
</script>


<script type="text/javascript">
	function retBytes(str){//求字符串长度
		var num = str.length;
		for(var i = 0; i < str.length; i ++ ){
			if(str.charCodeAt(i) >255 ){
				num ++;
			}
		}
		return num;
	}

	var str = 'hello你好';
	console.log(retBytes(str));

	var arr = ['asd','s啊发发','as打','sdfg','dd多发个','asdasdf'];
	arr.sort(function (a, b){
		return retBytes(a) - retBytes(b);
	});
	console.log(arr);
</script>

不改变原数组
concat,join -->split,toString,Slice

concat 连接数组成新数组
<script type="text/javascript">
	var arr = ['a','s','s','gf'];
	var arr1 = [1,2,3];
	arr.concat(arr1);//把后面数组连接到前面数组成新数组，不影响原来数组
	console.log(arr.concat(arr1));

	console.log(arr.toString);

	console.log(arr.slice(1,2));//从第1位开始截取，截取到第2位
	console.log(arr.slice(1));//一个参数的情况，从第一位开始截取，一直截取到最后

	console.log(arr.join('-'));//join()里必须加字符串
	var arr2 = 'a-s-s-gf';
	console.log(arr2.split('-'));//拆分成数组，与join互逆
</script>
